const express = require('express');
const { body, param } = require('express-validator');
const VideoController = require('../../controllers/VideoController');
const { authenticateJWT, authorizeAdmin } = require('../../middleware/auth');

const router = express.Router();

// 公共接口 - 按照新的规范实现视频接口

// 静态路由先定义

// 14. 获取所有最新视频，从视图videos_detail中获取，分页，每页10个，video_id是主键
router.get('/', VideoController.getAllLatestVideos);

// 11. 获取推荐视频，从视图videos_detail中获取，按照收藏量，分页，每页10个，video_id是主键
router.get('/recommended', VideoController.getRecommendedVideos);

// 12. 获取热门视频，从视图videos_detail中获取，按照点赞量，分页，每页10个，video_id是主键
router.get('/hot', VideoController.getHotVideos);

// 13. 获取精选视频，从视图videos_detail中获取，按照评论量，分页，每页10个，video_id是主键
router.get('/featured', VideoController.getFeaturedVideos);

// 4. 按照category_id获取所有视频，从视图videos_detail中获取，分页，每页10个
router.get('/category/:category_id', [
  param('category_id').isNumeric().withMessage('分类ID必须是数字')
], VideoController.getVideosByCategory);

// 5. 按照type_id获取所有视频，从视图videos_detail中获取，分页，每页10个
router.get('/type/:type_id', [
  param('type_id').isNumeric().withMessage('类型ID必须是数字')
], VideoController.getVideosByType);

// 用户视频操作接口 - 需要认证
// 发布视频
router.post('/', authenticateJWT, [
  body('title').notEmpty().withMessage('视频标题不能为空').isLength({ max: 200 }).withMessage('视频标题不能超过200个字符'),
  body('description').optional().isLength({ max: 2000 }).withMessage('视频描述不能超过2000个字符'),
  body('video_url').notEmpty().withMessage('视频URL不能为空').isURL().withMessage('视频URL格式无效'),
  body('cover_url').notEmpty().withMessage('封面URL不能为空').isURL().withMessage('封面URL格式无效'),
  body('duration').notEmpty().withMessage('视频时长不能为空').isNumeric().withMessage('视频时长必须是数字'),
  body('category_id').notEmpty().withMessage('分类ID不能为空').isNumeric().withMessage('分类ID必须是数字'),
  body('video_type_id').notEmpty().withMessage('视频类型ID不能为空').isNumeric().withMessage('视频类型ID必须是数字'),
  body('tags').optional().isArray().withMessage('标签必须是数组')
], VideoController.createVideo);

// 更新视频信息
router.put('/:id', authenticateJWT, [
  param('id').isNumeric().withMessage('视频ID必须是数字'),
  body('title').optional().isLength({ max: 200 }).withMessage('视频标题不能超过200个字符'),
  body('description').optional().isLength({ max: 2000 }).withMessage('视频描述不能超过2000个字符'),
  body('cover_url').optional().isURL().withMessage('封面URL格式无效'),
  body('category_id').optional().isNumeric().withMessage('分类ID必须是数字'),
  body('video_type_id').optional().isNumeric().withMessage('视频类型ID必须是数字'),
  body('tags').optional().isArray().withMessage('标签必须是数组')
], VideoController.updateVideo);

// 删除视频
router.delete('/:id', authenticateJWT, [
  param('id').isNumeric().withMessage('视频ID必须是数字')
], VideoController.deleteVideo);

// 注意：以下接口已移除，应通过对应模型的接口获取
// - 获取所有视频类型（video_type表）
// - 获取所有视频分类（categories表）
// - 获取所有标签（tag表）
// - 获取所有选集（episode表）

// 注意：以下接口已移除，应通过对应模型的接口获取
// - 获取视频评论（comments表）
// - 获取视频点赞者（likes表）
// - 获取视频收藏者（favorate表）

// 动态路由最后定义
// 1. 获取视频详情，从视图videos_detail中获取，video_id是主键
router.get('/:id', [
  param('id').isNumeric().withMessage('视频ID必须是数字')
], VideoController.getVideoDetail);

// 注意：根据新的接口规范，以下管理员和用户互动相关接口已移除
// 如需相关功能，请使用其他模块的对应接口

module.exports = router;